/////////////////////////////////////////////////////////////////////////////////////////////////////
//	File	:	"CObjectManager.h"
//
//	Author	:	Travis Setz (TS)
//
//	Purpose	:	The header file for the object manager to contain and manage all of the game objects.
/////////////////////////////////////////////////////////////////////////////////////////////////////

#pragma once
#include <vector>
using std::vector;

class CBase;

class CObjectManager
{
private:
	//data structure for game objects
	vector<CBase*> m_vObjects;
///////////////////////////////////////////////////////////////////////////////////////////////////////
//  Function: Constructor
//	Last Modified: August 17, 2008
//  Purpose : Used to initialize values for the class members. (private for singleton)
///////////////////////////////////////////////////////////////////////////////////////////////////////
	CObjectManager(void);
///////////////////////////////////////////////////////////////////////////////////////////////////////
//  Function: Constructor
//	Last Modified: August 17, 2008
//  Purpose : Used to clean up memory used by the class.
///////////////////////////////////////////////////////////////////////////////////////////////////////
	~CObjectManager(void);

public:

/////////////////////////////////////////////////////////////
//	Function:	"GetInstance"
//	Last Modified: August 17, 2008
//	Purpose:	To return the singleton's instance.
/////////////////////////////////////////////////////////////
	static CObjectManager* GetInstance(void)
	{
		static CObjectManager instance;
		return &instance;
	}

///////////////////////////////////////////////////////////////////////////////////////////
//	Function:	"Update Objects"
//	Last Modified: August 17, 2008
//	Purpose:	calls the update function of each object contained in the object manager.
//////////////////////////////////////////////////////////////////////////////////////////
	void UpdateObjects(float fElapsedTime);

///////////////////////////////////////////////////////////////////////////////////////////
//	Function:	"Render Objects"
//	Last Modified: August 17, 2008
//	Purpose:	calls the render function of each object contained in the object manager.
//////////////////////////////////////////////////////////////////////////////////////////
	void RenderObjects(void);

///////////////////////////////////////////////////////////////////////////////////////////
//	Function:	"Add Object"
//	Last Modified: August 17, 2008
//	Purpose:	Adds the passed in object to the object manager.
//////////////////////////////////////////////////////////////////////////////////////////
	void AddObject(CBase* pObject);

///////////////////////////////////////////////////////////////////////////////////////////
//	Function:	"Remove Object"
//	Last Modified: August 17, 2008
//	Purpose:	Removes the passed in object from the object manager.
//////////////////////////////////////////////////////////////////////////////////////////
	void RemoveObject(CBase* pObject);

///////////////////////////////////////////////////////////////////////////////////////////
//	Function:	"Remove All Objects"
//	Last Modified: August 17, 2008
//	Purpose:	Removes all objects from the object manager.
//////////////////////////////////////////////////////////////////////////////////////////
	void RemoveAllObjects(void);

///////////////////////////////////////////////////////////////////////////////////////////
//	Function:	"Check Collisions"
//	Last Modified: August 17, 2008
//	Purpose:	Calls the check collision function of each object in the object manager.
//////////////////////////////////////////////////////////////////////////////////////////
	void CheckCollisions(void);
};